#!/bin/bash
#

EXECARGARINDEXADOS='../../../../tp1-parte2/CargarIndexados'
EXETP2='../../../../tp1-parte2/tp1parte2'
EXERECUPERARDEINDEXADOS='../../../../tp1-parte2/RecuperarDeIndexados'

TESTS=0
CORRECTOS=0
INCORRECTOS=0

chequearPath() {
        if [ ! -e CorrerTestsParte2 ]
        then
                echo EJECUTAR DESDE EL PATH CORRECTO !!!
                exit -1
        fi
}

chequearEjecutable() {
        if [ ! -e '../../tp1-parte2/CargarIndexados' ]
        then
                echo Cargar Indexados no esta compilado, compilandolo ... !
                cd ../../tp1-parte2
                cobc -x CargarIndexados.cob
                cd '../TEST/Parte 2'
        fi

        if [ ! -e '../../tp1-parte2/RecuperarDeIndexados' ]
        then
                echo Recuperar De Indexados no esta compilado, compilandolo ... !
                cd ../../tp1-parte2
                cobc -x RecuperarDeIndexados.cob
                cd '../TEST/Parte 2'
        fi

        if [ ! -e '../../tp1-parte2/tp1parte2' ]
        then
                echo TP 2 no esta compilado, compilandolo ... !
                cd ../../tp1-parte2
                cobc -x tp1parte2.cob
                cd '../TEST/Parte 2'
        fi

        if [ ! -e '../../tp1-parte2/SUBRUTINACLIENTE.so' ]
        then
                echo SUBRUTINACLIENTE no esta compilado, compilandolo ... !
                cd ../../tp1-parte2
                cobc SUBRUTINACLIENTE.CBL
                cd '../TEST/Parte 2'
        fi
}

inicializarTest() {
	cd $testCases
        echo "***************************************************"
        echo
	echo Empezando test = $(echo $testCases | cut -d/ -f1)
	cat desc
        echo
}

limpiarAnteriores() {
	rm log 2> /dev/null
	rm OUTPUT/* 2> /dev/null
}

crearArchivos() {
	cd INPUT
	touch ALQUILERES.DAT
	touch CHOFERES.DAT
	touch CLIENTES.DAT
        touch stderr
}

ejecutarTest() {
	$EXECARGARINDEXADOS > /dev/null 2> /dev/null
	PIDCargarIndexados=$!
	
	wait $PIDPIDCargarIndexados

        cp ../../../../tp1-parte2/SUBRUTINACLIENTE.so ./
	$EXETP2 > stdout 2> stderr
	PIDTP2=$!
        rm SUBRUTINACLIENTE.so

	$EXERECUPERARDEINDEXADOS > /dev/null 2> /dev/null
		
}

moverArchivosAOutput() {
	mv *.DAT ../OUTPUT 2> /dev/null
	mv *.DAT.1 ../OUTPUT 2> /dev/null
	mv stdout ../OUTPUT 2> /dev/null
	mv stderr ../OUTPUT 2> /dev/null
	mv LISTADO.TXT ../OUTPUT 2> /dev/null
        mv ALQUILERESOUT.TXT ../OUTPUT/ALQUILERES.TXT 2> /dev/null
        mv CHOFERESOUT.TXT ../OUTPUT/CHOFERES.TXT 2> /dev/null
        mv CLIENTESOUT.TXT ../OUTPUT/CLIENTES.TXT 2> /dev/null
        mv RECHAZOSOUT.TXT ../OUTPUT/RECHAZOS.TXT 2> /dev/null
}

matchearYLoguear() {
	let TESTS+=1
        fail=false
	for matchFile in $(ls ../EXPECTED/)
	do
                diff -c ../EXPECTED/$matchFile ../OUTPUT/$matchFile >> ../log 2>> ../log
                if [ $? -ne 0 ]
                then
                        fail=true
                        echo -e "\e[0;31mFAIL\e[0m" en $matchFile
                fi
	done
        echo
        if [[ $fail = true ]]
        then
                echo
                cat ../log
                echo
                echo -e "\e[0;31mFAIL\e[0m" test $(echo $testCases | cut -d/ -f1) fallo, chequear "$testCases"log
                echo Fail en test $(echo $testCases | cut -d/ -f1) >>../../log
                let INCORRECTOS+=1
        else
                echo -e "\e[0;32m"test $(echo $testCases | cut -d/ -f1) OK"\e[0m"
                let CORRECTOS+=1
        fi
}

escribirLogFinal() {
        echo >> log
        echo TESTS = $TESTS >> log
        echo CORRECTOS = $CORRECTOS >> log
        echo INCORRECTOS = $INCORRECTOS >> log
}

rm log 2> /dev/null

echo EMPEZANDO TEST PARTE 2
echo

chequearPath
chequearEjecutable

for testCases in $(ls -d */)
do
	echo
	inicializarTest
	limpiarAnteriores
	crearArchivos
	ejecutarTest
	moverArchivosAOutput
	matchearYLoguear
	cd ../../
	echo
done

echo
echo TESTS = $TESTS
echo -e CORRECTOS = "\e[0;32m"$CORRECTOS"\e[0m"
if [[ $INCORRECTOS > 0 ]]
then
        echo -e INCORRECTOS = "\e[0;31m"$INCORRECTOS ! "\e[0m"
else
        echo INCORRECTOS = $INCORRECTOS
fi

echo
echo FIN TEST PARTE 2

escribirLogFinal
